ガイガーカウンター(2)
4. INT入力 ガイガーカウンター(1):
GM管からの信号は鋭いパルス状なので、LND712のようにGM管の感度が良く、単位時間当たりのカウント数が多い場合、この数10kHz以上の高速の信号をもれなくカウントするにはデジタル入力では無理で、INT入力( ・・・ パルス状の変化に反応して割込み関数に飛ぶ機能。 INTはタイマーの割込みや他のプログラムよりも優先し、プログラムの途中で飛び、終わったらそこに戻る。
PIC16F628Aの場合 6pin)を用いる。
プログラムの形としては、(普通行なわれているように、)割込み関数部分になるべく時間を取られないように、メイン関数で他の関数に飛ぶようにして、ちらつきやカウントのロスを防ぐようにした。また、LCD表示のための
for文はやめ、1つずつ表示するようにした。
カウント毎に、圧電サウンダとLEDを駆動するための 交互出力を発生させたが、これにはかなりの時間が取られるので
メイン関数に入れた。
いずれにしても、メイン関数と割込み関数との間を行き来する時間がかかるので、このロスが高速測定の限界となる。
(* 複数のINT入力(他は SWなど)にしたい場合は、PIC16シリーズでは無理で、PIC18シリーズ(PIC18F14K50など)やAVRマイコンなどを用いる。)
高電圧発生用トランスは、10mHのインダクタ(中央のくびれているもの)にφ.4ホルマル線を5〜6T巻いて作成した。ロシア管などの800V仕様には上記の倍圧整流を追加する。 電圧調整は、電源9Vで 500ΩVRにより、450〜600Vを充分カバーできる。(ただし、このインダクタ巻き線法は磁路が閉じていないので 低電圧領域(200V前後)で発振するので注意。
スイッチング昇圧(L=680μHで260〜300Vなど)では 後に昇圧回路を付けても条件が厳しく思うように電圧が上がらない。(10mHインダクタで1kHzあたりが良いそう) また”写ルンです”トランスは450Vまで。)
* この インダクタに巻き線する方法は、後に コッククロフト・ウォールトンの昇圧整流回路を付けると簡単に数千Vまで昇圧するので、手製の”フィルムケース・ガイガー”等を駆動する電源にすることができる。(7倍圧で3500〜5000Vなど)
電源9Vの場合、トータル消費電力は、10mA前後なので、006Pでも充分実用になる。
測定結果(プラスチックケースを通しての値)は、 B.G.: 22(cpm)、 マントル接触: 440(cpm)、 閃ウラン鉱・距離1cm: 3100(cpm) となり、1.のプログラムよりも大幅に改善された。 ただし、1秒周期程度の測定値の変動があるので、やはり高圧トランスはしっかりしたものを使用すべきと思われる。5秒程度の平均値をとれば問題なく相対比較ができる。
● ソース:
5. INT入力 ガイガーカウンタ(2):
複数の INT入力や 多彩な機能を持つ、PIC18シリーズを用いて ガイガーカウンタを作ることにする。( → PIC18コンパイラ の扱い方については、PIC18電圧計/温度計 参照 )
PIC18F2550(28ピン)は、3本のINT入力を持ち、割込みの高・低優先の区別ができ、また
LCDにつなぎやすいpin構成なので、INT0 をGM管からの入力用(高優先割込み)、タイマー1を時間創生(高優先割込み)、INT1を測定モード切り替えスイッチ入力用(低優先割込み)としてプログラムを構成した。
ただし、パソコンとの通信機能は シリアル、USB共、タイマー1割込みとの相性が悪く、通信バッファにデータを置くための待ち時間(TXIFが0になる時のwhile中)に 他の割り込みが起こると、タイマーと通信の両方とも停止してしまう。タイマーを全く使わない方法もあるが、ここでは とりあえず、通信無しの単独の装置として作製することにした。(回路図や写真には、USBコネクタと電源切り替え部が付いていますが、必ずしも作る必要はありません)
USB−Bコネクタからは、パソコンからの5V電源は取ることができる。 電池電源(9V)がつながっている時は FETのゲートににバイアスがかかるので、USBからのバスパワーは止められて 優先して電池から流れ、電池がはずされたときに初めてUSBから電流が流れる。消費電流は 13〜17mA程度で、パソコンからの電源容量は機種により 100mA(MAX)〜500mA(MAX)なので充分余裕がある。
高圧電源は、5V入力に対応できるように 倍圧整流とし、少しでも安定化させるため平滑抵抗・コンデンサを入れた。
PIC18は、コンフィグレーションの項目が多いが、必要な項目は少ない。(クロック関係と 起動リセット関係に分けられる) 外部発振子(水晶)で20MHzが PLLで48MHzに上がり、CPUデバイダにより 動作クロックは 12MHzになる。これによって、一定時間を費やす関数は Delay1TCYx(12)
= 1μS になる。
PIC18では、高優先・低優先割込みの アドレス(高優先:0x08−、低優先:0x18−)は指定しなければならない。
高優先割込み関数 high(名前は何でも良い)に、 @ タイマ1割込み、A INT0割込み、低優先割込み関数 low に、B INT1の割込みを入れた。
@では、ストップウォッチの他に、1秒毎に過去10個分の総和 C を計算し、また
1分毎のカウント数 AA を記録する。 Aでは、GM管からのパルス入力ごとに割込みし、A、b1、c1
の変数にそれぞれ1を加える。
B では、低優先で タクトスイッチからの短い信号を受け、3サイクルのスイッチにして
表示内容を、 b1−8(8桁の総カウント数)、AA(1分ごとに更新する1分間数えたカウント数)、CC(1秒ごとに更新する10回平均カウント数、6の倍数になる)
と 切り替える。(μSv(マイクロシーベルト) の計算は、線種が α線と、β線・γ線で異なるため、行なっていない)
PIC18Fでは、割込みの許可、フラグや、ポートのピンの指定などをすべてビット(〜bits.〜)で指定する。
タイマーの他に ADコンバータ、シリアルなどのヘッダファイルを呼び出し、それぞれの関数名で動かすことができる。タイマ1では、ヘッダファイルにある
OpenTimer1で条件を指定する。 INT0、1の割り込みは、INTCONビットで指定する。 それらに加えて 高優先・低優先の2段階に分けるか、許可するかを指定する。 PIC16シリーズと違って、ピンはそのままではアナログになっているので、ADCON1の決められた組み合わせによってデジタルにしなければならない。(0xFFですべてデジタル) 高電圧駆動用パルスを与える
PWMモードは16Fシリーズと同様、ただし 動作クロックが12MHzになっているので、T2CONのプリスケーラー(01で1/4、
00:1/1、1X:1/16)と 数値(上記4.の3倍)で修正する。
● ソース: * タイマ1割り込みの設定に計算ミスがありましたので直しておきました
プラスチックケースを通して測定した結果(cpm、測定時間 1分毎の)は、 B.G.: 20〜30、 マントル: 300〜400、 閃ウラン鉱の小塊: 2000〜2500 であり、計算に時間が取られるせいか 上記4.に比べ、閃ウラン鉱で3000cpmもいかないので、カウント速度が速いと数え落しが出ているようである。(特に、1秒ごとのカウント数の表示は
1000を超えると700位に激減しているので、変化を見るための CC の値(10回平均)は
あくまで目安となる。)
LEDとサウンダの反応は プログラム上遅くできているので、100cpm以上では同じ点滅を繰り返し、放射線が来ているのがわかる程度の機能となる。
高速カウンターにする場合は、デジタル信号に変換して、サイクルカウンターと同様に入力部を工夫する必要がある。(T0CKI入力等)
* マイクロシーベルトへの換算は、シールドですべてベータ線、ガンマ線になっていると仮定し、ガイガー管:
LND712 ですべて数え落とし無く数えたとして、LND712のデータシートより、
1(μSv/h) = 33.3(cpm) (103 cpsまでは直線的)
たとえば マントルで 333cpmのとき 10μSv/h となる。それ以上の場合は
大幅に補正しなければならない。(アルファ線の場合は、さらに係数20を掛けた値になる。)